home *** CD-ROM | disk | FTP | other *** search
Wrap
'************************************************************************** '* RECIPES FOR WINDOWS V2.00 '************************************************************************** '$DEFINE DEBUG '$INCLUDE 'setupapi.inc' '$INCLUDE 'msdetect.inc' ''Dialog ID's CONST NEWINSTALL = 101 CONST ASKQUIT = 200 CONST RESTART = 201 CONST DESTPATH = 300 CONST EXITFAILURE = 400 CONST EXITQUIT = 600 CONST EXITSUCCESS = 700 CONST CHECK = 2500 CONST APPHELP = 900 CONST CUSTINST = 6200 CONST TOOBIG = 6300 CONST BADPATH = 6400 ''Bitmap ID CONST LOGO = 1 ''File Types CONST APPFILES = 1 CONST OPTFILES1 = 2 GLOBAL AppName$ GLOBAL ExeName$ GLOBAL DEST$ GLOBAL OLDDEST$ GLOBAL DESTDATA$ GLOBAL WINDRIVE$ GLOBAL WINDIR$ GLOBAL WINSYSDIR$ GLOBAL SYSFILES$ GLOBAL szSYSFILES$ ''CustInst list symbol names GLOBAL APPNEEDS$ ''Option list costs per drive GLOBAL CHK1NEEDS$ GLOBAL EXTRACOSTS$ ''List of extra costs to add per drive GLOBAL BIGLIST$ ''List of option files cost calc results (boolean) ''Dialog list symbol names GLOBAL CHECKSTATES$ GLOBAL STATUSTEXT$ GLOBAL DRIVETEXT$ const MaxNumOfFiles = 60 const MaxNumOfBuffers = 20 const ConfigSys$ = "c:\config.sys" const ConfigBak$ = "c:\config.bak" const AutoBat$ = "c:\autoexec.bat" const AutoBak$ = "c:\autoexec.bak" Rtn$ = Chr$(13)+Chr$(10) Q$ = Chr$(34) GLOBAL UPDATENEW% GLOBAL NODELETE% CONST NEW = 1 CONST UPDATE = 2 UPDATENEW% = NEW NODELETE% = 0 DECLARE SUB AddOptFilesToCopyList (ftype%) DECLARE SUB RecalcOptFiles (ftype%) DECLARE SUB RecalcPath DECLARE SUB SetDriveStatus DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING DECLARE FUNCTION GetDrive (szPath$) AS STRING INIT: hinstOC% = LoadLibrary("OCCTRL20.DLL") hinstCT% = LoadLibrary("CTL3D.DLL") y% = Ctl3dRegister(hinstCT%) y% = Ctl3dAutoSubClass(hinstCT%) CUIDLL$ = "mscuistf.dll" ''custom user interface dll HELPPROC$ = "FHelpDlgProc" ''Help dialog procedure AppName$ = "Recipes for Windows" ExeName$ = "RECIPES.EXE" DirName$ = "RECIPES2" IniName$ = "RECIPES" SetBitmap CUIDLL$, LOGO SetTitle "Recipes for Windows" Handle% = HwndFrame() y% = ShowWindow(Handle%, 3) szInf$ = GetSymbolValue("STF_SRCINFPATH") IF szInf$ = "" THEN szInf$ = GetSymbolValue("STF_CWDDIR") + IniName$+".INF" END IF ReadInfFile szInf$ WINSYSDIR$ = GetWindowsSysDir() WINDIR$ = GetWindowsDir() WINDRIVE$ = MID$(GetWindowsDir, 1, 1) DEST$ = WINDRIVE$ + ":\"+DirName$ DESTDATA$ = WINDRIVE$ + ":\"+DirName$+"\DATA" ''CustInst list symbols CHECKSTATES$ = "CheckItemsState" STATUSTEXT$ = "StatusItemsText" DRIVETEXT$ = "DriveStatusText" FOR i% = 1 TO 2 STEP 1 AddListItem CHECKSTATES$, "ON" NEXT i% FOR i% = 1 TO 2 STEP 1 AddListItem STATUSTEXT$, "" NEXT i% FOR i% = 1 TO 7 STEP 1 AddListItem DRIVETEXT$, "" NEXT i% ReplaceListItem DRIVETEXT$, 7, DEST$ ''Disk cost list symbols APPNEEDS$ = "AppNeeds" CHK1NEEDS$ = "Chk1Needs" EXTRACOSTS$ = "ExtraCosts" BIGLIST$ = "BigList" FOR i% = 1 TO 2 STEP 1 AddListItem BIGLIST$, "" NEXT i% FOR i% = 1 TO 26 STEP 1 AddListItem EXTRACOSTS$, "0" NEXT i% ''File Option Variables sOPTION$ = "{""ON""}" SYSFILES$ = "2" szSYSFILES$ = "2" n% = DoesIniKeyExist("WIN.INI", AppName$, "EXEDIR") IF n% = 1 THEN TMP$ = GetIniKeyString("WIN.INI", AppName$ ,"EXEDIR") IF TMP$ <> "" THEN OLDDEST$ = UCASE$(TMP$) OLDDEST$ = StripPath(OLDDEST$) ENDIF IF TMP$ = "" THEN OLDDEST$ = DEST$ OLDDEST$ = StripPath(OLDDEST$) ENDIF UPDATENEW% = UPDATE ENDIF IF UPDATENEW% = UPDATE THEN GOTO UPDATE ELSE RecalcPath SetDriveStatus GOTO CUSTINST ENDIF '$IFDEF DEBUG i% = SetSizeCheckMode(scmOnIgnore) '' could use scmOff; def = scmOnFatal '$ENDIF ''DEBUG UPDATE: sz$ = UIStartDlg(CUIDLL$, NEWINSTALL, "FInfoDlgProc", APPHELP, HELPPROC$) IF sz$ = "BACK" THEN ''UPDATE UIPop 1 DEST$ = OLDDEST$ DESTDATA$ = DEST$+"\DATA" NODELETE% = 1 ReplaceListItem DRIVETEXT$, 7, DEST$ RecalcPath SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CONTINUE" THEN ''NEW INSTALL DELETES ALL FILES RELATED TO RECIPES UIPop 1 DEST$ = OLDDEST$ DESTDATA$ = DEST$+"\DATA" ReplaceListItem DRIVETEXT$, 7, DEST$ RecalcPath SetDriveStatus GOTO CUSTINST ELSE GOSUB ASKQUIT GOTO UPDATE ENDIF CUSTINST: sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN ''Install only if it will fit. FOR i% = 1 TO 2 STEP 1 IF GetListItem(BIGLIST$, i%) <> "" THEN GOSUB TOOBIG GOTO CUSTINST END IF NEXT i% UIPop 1 IF (DEST$ = OLDDEST$) AND (NODELETE% = 0) THEN CursorSave% = ShowWaitCursor() RemoveFile MakePath(DEST$,"CTL3D.DLL"),cmoForce RemoveFile MakePath(DEST$,"OCCTRL20.DLL"),cmoForce RemoveFile MakePath(DEST$,"PXENGWIN.DLL"),cmoForce RemoveFile MakePath(DEST$,"RECIPES.EXE"),cmoForce RemoveFile MakePath(DEST$,"RECIPES.HLP"),cmoForce RemoveFile MakePath(DEST$,"OCREPORT.DLL"),cmoForce RemoveFile MakePath(DEST$,"TBPRO1W.DLL"),cmoForce RemoveFile MakePath(DEST$,"TBPRO2W.DLL"),cmoForce RemoveFile MakePath(DEST$,"TBPRO3W.DLL"),cmoForce RemoveFile MakePath(DEST$,"TBPRO6W.DLL"),cmoForce RemoveFile MakePath(WINSYSDIR$,"OCCTRL20.DLL"),cmoForce RemoveFile MakePath(WINSYSDIR$,"OCREPORT.DLL"),cmoForce RemoveFile MakePath(WINSYSDIR$,"TBPRO1W.DLL"),cmoForce RemoveFile MakePath(WINSYSDIR$,"TBPRO2W.DLL"),cmoForce RemoveFile MakePath(WINSYSDIR$,"TBPRO3W.DLL"),cmoForce RemoveFile MakePath(WINSYSDIR$,"TBPRO6W.DLL"),cmoForce RestoreCursor CursorSave% ENDIF IF ((GetListItem(CHECKSTATES$, APPFILES) = "ON") OR (GetListItem(CHECKSTATES$, OPTFILES1) = "ON")) THEN GOTO INSTALL ELSE i% = DoMsgBox("You must have at least one option checked." , AppName$, MB_OK+MB_TASKMODAL+MB_ICONHAND) GOTO CUSTINST ENDIF ELSEIF sz$ = "PATH" THEN GOTO GETPATH ELSEIF sz$ = "CHK1" THEN IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN sOPTION$ = "{""ON""}" ENDIF RecalcOptFiles APPFILES SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "CHK2" THEN RecalcOptFiles OPTFILES1 SetDriveStatus GOTO CUSTINST ELSEIF sz$ = "BTN1" THEN GOTO APPFILES1 ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO CUSTINST ELSE GOSUB ASKQUIT GOTO CUSTINST END IF INSTALL: ClearCopyList AddOptFilesToCopyList APPFILES AddOptFilesToCopyList OPTFILES1 ''SetCopyGaugePosition 210,250 IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN DirExist% = DoesDirExist(DEST$) IF DirExist% = 1 THEN i% = DoMsgBox("This directory " + DEST$ +" already exists. Do you want to overwrite it?", AppName$, MB_YESNO+MB_TASKMODAL+MB_ICONHAND) IF i% = 7 THEN GOTO CUSTINST END IF END IF END IF IF GetListItem(CHECKSTATES$, OPTFILES1) = "ON" THEN DirExist% = DoesDirExist(DESTDATA$) IF DirExist% = 1 THEN i% = DoMsgBox("This directory " + DESTDATA$ + " already exists. Do you want to overwrite it? If you choose YES, all of your data will be lost.", AppName$, MB_YESNO+MB_TASKMODAL+MB_ICONHAND) IF i% = 7 THEN GOTO CUSTINST END IF END IF END IF CreateDir DEST$, cmoNone CreateDir DESTDATA$, cmoNone FileName$ = DESTDATA$ + "\RECIPES.PX" FileExist% = DoesFileExist(FileName$, femExists) IF FileExist% = 1 THEN RemoveFile FileName$, cmoNone END IF FileName$ = DESTDATA$ + "\_RECIPES.PX" FileExist% = DoesFileExist(FileName$, femExists) IF FileExist% = 1 THEN RemoveFile FileName$, cmoNone END IF FileName$ = DESTDATA$ + "\COUPONS.PX" FileExist% = DoesFileExist(FileName$, femExists) IF FileExist% = 1 THEN RemoveFile FileName$, cmoNone END IF FileName$ = DESTDATA$ + "\PANTRY.PX" FileExist% = DoesFileExist(FileName$, femExists) IF FileExist% = 1 THEN RemoveFile FileName$, cmoNone END IF FileName$ = DESTDATA$ + "\RESTAUR.PX" FileExist% = DoesFileExist(FileName$, femExists) IF FileExist% = 1 THEN RemoveFile FileName$, cmoNone END IF FileName$ = DESTDATA$ + "\LAYOUT.PX" FileExist% = DoesFileExist(FileName$, femExists) IF FileExist% = 1 THEN RemoveFile FileName$, cmoNone END IF FileName$ = DESTDATA$ + "\USERLIST.PX" FileExist% = DoesFileExist(FileName$, femExists) IF FileExist% = 1 THEN RemoveFile FileName$, cmoNone END IF FileName$ = DESTDATA$ + "\SHOPLIST.PX" FileExist% = DoesFileExist(FileName$, femExists) IF FileExist% = 1 THEN RemoveFile FileName$, cmoNone END IF FileName$ = DESTDATA$ + "\SHOPITEM.PX" FileExist% = DoesFileExist(FileName$, femExists) IF FileExist% = 1 THEN RemoveFile FileName$, cmoNone END IF CopyFilesInCopyList IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN FileName$ = WINDIR$ + IniName$+".INI" FileExist% = DoesFileExist(FileName$, femExists) IF FileExist% = 1 THEN CopyFile FileName$, DEST$+"\"+IniName$+".INI", cmoNone, 0 RemoveFile FileName$, cmoNone END IF WinINI$ = MakePath(WINDIR$, "WIN.INI") CreateIniKeyValue WinINI$, AppName$, "DATADIR", DESTDATA$+"\", cmoOverwrite CreateIniKeyValue WinINI$, AppName$, "EXEDIR", DEST$+"\", cmoOverwrite ini$ = MakePath(DEST$, IniName$+".INI") CreateIniKeyValue ini$, "Directories", "Data", DESTDATA$+"\", cmoOverwrite ini$ = "" OTHER$ = Q$+Q$+","+Q$+Q$+","+Q$+Q$+","+Q$+Q$+DESTDATA$ CreateProgmanGroup AppName$, "", cmoNone ShowProgmanGroup AppName$, 1, cmoNone CreateProgmanItem AppName$, "Recipes 2.0", MakePath(DEST$, ExeName$), OTHER$, cmoOverwrite CreateProgmanItem AppName$, "Late Breaking News", "notepad.exe "+MakePath(DEST$,"readme.txt"), "", cmoOverwrite END IF QUIT: ON ERROR GOTO ERRQUIT IF ERR = 0 THEN dlg% = EXITSUCCESS ELSEIF ERR = STFQUIT THEN dlg% = EXITQUIT ELSE dlg% = EXITFAILURE END IF QUITL1: sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN GOTO QUITL1 END IF UIPop 1 '' Find number of files in config.sys if (GetConfigNumFiles < MaxNumOfFiles) OR (GetConfigNumBuffers < MaxNumOfBuffers) then Rc% = UpdateConfigSys(ConfigSys$, ConfigBak$, MaxNumOfFiles, MaxNumOfBuffers) if Rc% = 0 then i% = DoMsgBox("Failed to update CONFIG.SYS.", AppName$, MB_OK+MB_TASKMODAL+MB_ICONINFORMATION) else Msg$ = "Your CONFIG.SYS has been modified. The original has been renamed to CONFIG.BAK." + Rtn$ Msg$ = Msg$ + "RESTART your machine for the changes to take effect." i% = DoMsgBox(Msg$, AppName$, MB_OK+MB_TASKMODAL+MB_ICONINFORMATION) end if end if '' Find if share.exe is loaded InstallDrive$ = GetDrive(DEST$) if IsDriveNetwork(InstallDrive$) = 0 then '' This is a local drive if IsShareInstalled(AutoBat$) = 0 then '' Share is not installed InstallDrive$ = InstallDrive$ +":\" SharePath$ = FindFileInTree("SHARE.EXE", InstallDrive$) if SharePath$ = "" then i% = DoMsgBox("SHARE.EXE can not be found. Please make sure that SHARE.EXE is loaded before running "+AppName$+".", AppName$, MB_OK+MB_TASKMODAL+MB_ICONINFORMATION) else Rc% = AddShareToAutoExec(AutoBat$, AutoBak$, SharePath$) if Rc% = 0 then i% = DoMsgBox("Failed to update AUTOEXEC.BAT.", AppName$, MB_OK+MB_TASKMODAL+MB_ICONINFORMATION) else Msg$ = "Your AUTOEXEC.BAT has been modified. The original has been renamed to AUTOEXEC.BAK." + Rtn$ Msg$ = Msg$ + "RESTART your machine for the changes to take effect." i% = DoMsgBox(Msg$, AppName$, MB_OK+MB_TASKMODAL+MB_ICONINFORMATION) end if end if end if end if IF dlg% = EXITSUCCESS Then Readme$ = "notepad.exe " + DEST$ + "\" + "readme.txt" i% = DoMsgBox("Would you like to view the README file.", AppName$, MB_YESNO+MB_TASKMODAL+MB_ICONINFORMATION) IF i% = 6 THEN Rc% = WinExec(README$, 1) END IF END IF y% = Ctl3dUnRegister(hinstCT%) FreeLibrary(hinstCT%) FreeLibrary(hinstOC%) END ERRQUIT: i% = DoMsgBox("Setup sources were corrupted, call (619) 929-7833!", AppName$, MB_OK+MB_TASKMODAL+MB_ICONHAND) END GETPATH: SetSymbolValue "EditTextIn", DEST$ SetSymbolValue "EditFocus", "END" GETPATHL1: sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$) IF sz$ = "CONTINUE" THEN olddest$ = DEST$ DEST$ = GetSymbolValue("EditTextOut") ''Validate new path. IF IsDirWritable(DEST$) = 0 THEN GOSUB BADPATH DEST$ = olddest$ GOTO GETPATHL1 END IF UIPop 1 ''Truncate display if too long. IF LEN(DEST$) > 23 THEN ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..." ELSE ReplaceListItem DRIVETEXT$, 7, DEST$ END IF ''Recalc if path changed. IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN RecalcPath SetDriveStatus END IF olddest$ = "" DESTDATA$ = DEST$+"\DATA" GOTO CUSTINST ELSEIF sz$ = "BACK" THEN RecalcPath SetDriveStatus UIPop 1 GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO GETPATHL1 ELSEIF sz$ = "EXIT" THEN GOSUB ASKQUIT GOTO GETPATHL1 ELSE UIPop 1 GOTO CUSTINST END IF APPFILES1: IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN SetSymbolValue "CheckItemsIn", sOPTION$ ELSE SetSymbolValue "CheckItemsIn", "" ENDIF APPL1: sz$ = UIStartDlg(CUIDLL$, CHECK, "FCheckDlgProc", APPHELP, HELPPROC$) newopt$ = GetSymbolValue("CheckItemsOut") IF sz$ = "CONTINUE" THEN UIPop 1 szSYSFILES$ = GetListItem("CheckItemsOut",1) x$ = "" IF szSYSFILES$ = "OFF" THEN szSYSFILES$ = "1" x$ = "ON" ELSE szSYSFILES$ = "" END IF RecalcOptFiles APPFILES SetDriveStatus newopt$ = "" GOTO CUSTINST ELSEIF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO APPL1 ELSEIF sz$ = "EXIT" THEN GOSUB ASKQUIT GOTO APPL1 ELSE UIPop 1 newopt$ = "" GOTO CUSTINST END IF TOOBIG: sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO TOOBIG END IF UIPop 1 RETURN BADPATH: sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "") IF sz$ = "REACTIVATE" THEN RecalcPath SetDriveStatus GOTO BADPATH END IF UIPop 1 RETURN ASKQUIT: sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "") IF sz$ = "EXIT" THEN UIPopAll ERROR STFQUIT ELSEIF sz$ = "REACTIVATE" THEN GOTO ASKQUIT ELSE UIPop 1 END IF RETURN '** '** Purpose: '** Adds the specified option files to the copy list. '** Arguments: '** ftype% - type of files to add, one of the following: '** Returns: '** none. '************************************************************************* SUB AddOptFilesToCopyList (ftype%) STATIC IF GetListItem(CHECKSTATES$, ftype%) = "ON" THEN SrcDir$ = GetSymbolValue("STF_SRCDIR") IF ftype% = APPFILES THEN AddSectionFilesToCopyList "AppFiles", SrcDir$, DEST$ IF szSYSFILES$ = "1" THEN AddSectionFilesToCopyList "SysFiles", SrcDir$, DEST$ ELSE AddSectionFilesToCopyList "SysFiles", SrcDir$, WINSYSDIR$ ENDIF ELSEIF ftype% = OPTFILES1 THEN AddSectionFilesToCopyList "DataFiles", SrcDir$, DESTDATA$ END IF SrcDir$ = "" END IF END SUB '** '** Purpose: '** Recalculates disk space for the given option files and sets '** the status info symbol "StatusItemsText". '** Returns: '** none. '************************************************************************* SUB RecalcOptFiles (ftype%) STATIC CursorSave% = ShowWaitCursor() ClearCopyList AddOptFilesToCopyList ftype% fExtra% = 0 IF ftype% = APPFILES THEN ListSym$ = APPNEEDS$ IF GetListItem(CHECKSTATES$, APPFILES) = "ON" THEN ''Add extra cost to Windows drive for ini/progman, etc. ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1 ReplaceListItem EXTRACOSTS$, ndrive%, "10240" fExtra% = 1 END IF ELSEIF ftype% = OPTFILES1 THEN ListSym$ = CHK1NEEDS$ IF GetListItem(CHECKSTATES$, OPTFILES1) = "ON" THEN ''Add extra cost to Windows drive for ini/progman, etc. ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1 ReplaceListItem EXTRACOSTS$, ndrive%, "10240" fExtra% = 1 END IF END IF StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "") cost& = 0 FOR i% = 1 TO 26 STEP 1 cost& = cost& + VAL(GetListItem(ListSym$, i%)) NEXT i% ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K" IF StillNeed& > 0 THEN ReplaceListItem BIGLIST$, ftype%, "YES" ELSE ReplaceListItem BIGLIST$, ftype%, "" END IF IF fExtra% THEN ReplaceListItem EXTRACOSTS$, ndrive%, "0" END IF RestoreCursor CursorSave% ListSym$ = "" END SUB '** '** Purpose: '** Recalculates disk space and sets option status info according '** to the current destination path. '************************************************************************* SUB RecalcPath STATIC CursorSave% = ShowWaitCursor() RecalcOptFiles APPFILES RecalcOptFiles OPTFILES1 RestoreCursor CursorSave% END SUB '** '** Purpose: '** Sets drive status info according to latest disk space calcs. '************************************************************************* SUB SetDriveStatus STATIC drive$ = MID$(DEST$, 1, 1) ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1 cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(CHK1NEEDS$, ndrive%)) free& = GetFreeSpaceForDrive(drive$) ReplaceListItem DRIVETEXT$, 1, drive$ + ":" ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K" ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K" IF drive$ = WINDRIVE$ THEN ReplaceListItem DRIVETEXT$, 4, "" ReplaceListItem DRIVETEXT$, 5, "" ReplaceListItem DRIVETEXT$, 6, "" ELSE ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1 cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(CHK1NEEDS$, ndrive%)) IF cost& = 0 THEN ReplaceListItem DRIVETEXT$, 4, "" ReplaceListItem DRIVETEXT$, 5, "" ReplaceListItem DRIVETEXT$, 6, "" ELSE free& = GetFreeSpaceForDrive(WINDRIVE$) ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":" ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K" ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K" END IF END IF END SUB '** '** Purpose: '** Appends a file name to the end of a directory path, '** inserting a backslash character as needed. '** Arguments: '** szDir$ - full directory path (with optional ending "\") '** szFile$ - filename to append to directory '** Returns: '** Resulting fully qualified path name. '************************************************************************* FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING IF szDir$ = "" THEN MakePath = szFile$ ELSEIF szFile$ = "" THEN MakePath = szDir$ ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN MakePath = szDir$ + szFile$ ELSE MakePath = szDir$ + "\" + szFile$ END IF END FUNCTION FUNCTION GetDrive (szPath$) STATIC AS STRING GetDrive = MID$( szPath$, 1, 1) END FUNCTION